The technology described herein relates to graphics processing systems, and in particular to graphics processing systems that include programmable blending functionality.
As is known in the art, two important operations in graphics processing (e.g., when processing computer graphics for display, e.g., on a screen or printer) are so-called “fragment shading” and “blending”.
As is known in the art, graphics processing is normally carried out by first dividing a scene to be displayed into a number of similar basic components (so-called “primitives”) to allow the graphics processing operations to be more easily carried out. These “primitives” are usually in the form of simple polygons, such as triangles.
To then process the primitives for display, it is first determined which sampling points of an array of sampling points covering the scene area to be processed are covered by a primitive (this process is commonly referred to as rasterising). The sampling points for a primitive are typically then represented as discrete graphical entities usually referred to as “fragments” on which subsequent graphics processing operations are carried out. Each sampling point will, in effect, be represented by a fragment that will be used to process the primitive at the sampling point in question. The “fragments” are the graphical entities that pass through the graphics process (the graphics pipeline).
An important part of the fragment processing is to determine the appearance that each sampling point that the fragment represents should have (e.g. in terms of its colour, etc.) to represent the primitive at that sampling point. This process involves “shading” (rendering) the fragment in question and is commonly referred to as “fragment shading”.
The fragment shading process thus derives data, such as red, green and blue (RGB) colour values and an “Alpha” (transparency) value, necessary to display the primitive at the sample points (i.e. “shades” each fragment). This can involve, as is known in the art, applying textures, combining fragment data values, etc.
Fragment shading may be carried out using fixed-function hardware, or by means of a software routine running a programmable processor. The latter case is commonly referred to (as is known in the art) as a “fragment shader”.
Blending typically involves taking newly generated fragment data (i.e. the results of the fragment shading) and blending it appropriately with data that has previously been generated for the fragment position(s) in question, e.g., that is stored in some output buffer, such as a tile buffer of a tile-based graphics processing system, to generate new, modified (“blended”) fragment data for the fragment position(s) in question.
As blending is an important and common operation in graphics processing, graphics processors and graphics processing systems typically include one or more fixed-function, hardware units, that are configured to perform (and accelerate) the blending process. These blending hardware units or stages are typically part of the graphics processing, e.g., rendering, pipeline.
However, it can also be possible to carry out blending in software running on a programmable processor of or that is associated with the graphics processor or graphics processing system. For example, a graphics processor may include a so-called “blend shader” that is operable to execute one or more blend shading programs (software routines) to perform graphics blending operations. Blend shaders can be used, e.g., to perform blending operations that may not, e.g., be directly supported by the fixed function blending hardware of a graphics processor.
The Applicants believe that there remains scope for improvements to graphics processing systems that include programmable blending functionality (i.e. the ability to perform blending using software routines or programs running on a programmable processor).
Like reference numerals are used for like features throughout the figures where appropriate.